CYA オレオレS3

問題名

オレオレS3

概要

nginxのログをfluentdで管理したいと思っています。
fluentdのバックエンドとして、S3互換であるオブジェクトストレージminioを構築しました。
しかし、うまく接続することができません。

前提条件

  • nginxの設定を変えてはいけない
  • vm2にはsshできない
  • fluentd,とminio以外のツールを用いて問題を解決してはならない
  • 他のオブジェクトストレージをインストールするなど
  • minioではなくクラウドサービス(AWS S3など)を利用するなど

初期状態

curl localhostを実行すると、fluentdに以下のようにエラーが出る。

/var/log/td-agent/td-agent.log

2023-03-01 03:11:29 +0900 [error]: #0 unexpected error error_class=RuntimeError error="can't call S3 API. Please check your credentials or s3_region configuration. error = #<seahorse::client::networkingerror: failed="" to="" open="" tcp="" connection="" test.192.168.19.2:9000="" (getaddrinfo:="" name="" or="" service="" not="" known)="">"
```</seahorse::client::networkingerror:>
## 終了状態 fluentdでログを収集できる。つまり以下を閲覧してもエラーメッセージが出てない。 `/var/log/td-agent/td-agent.log` また、awscliコマンドなど何らかの方法でminioにリクエストを飛ばして、ログが保存されていることを確認できる。 ```shell $ sudo apt install awscli $ aws configure --profile minio AWS Access Key ID [None]: saJ4MVuD7lcFdDnq AWS Secret Access Key [None]: bbrT3KuHRKebkvADOBYNH2w73Jgmt72C Default region name [None]: ap-northeast-1 Default output format [None]: $ aws --profile minio --endpoint-url http://192.168.19.2:9000 s3 ls --recursive s3://test/ 2023-03-01 03:36:37 129 logs/2023/03/01_0.gz 2023-03-01 03:37:43 127 logs/2023/03/01_1.gz 2023-03-01 03:41:29 162 logs/2023/03/01_2.gz 2023-03-01 03:45:13 168 logs/2023/03/01_3.gz ```

解説

概要

本問題はS3のアドレスモデルに関する問題です。
問題の開始状態では、td-agentからminio上のバケットに対してログを送信しようとすると失敗している。
そのため、エラーログを確認すると以下のようなログが出力されており、一見するとクレデンシャルかs3_regionの設定が良くないように見える。

Please check your credentials or s3_region configuration.

しかし、実際はエンドポイントのアドレスモデルに関してはtd-agentのs3プラグインではpath-style形式を、minioのvirtual-hosted style形式をデフォルトで採用している。
なので、今回の問題ではSSHで設定の変更が可能なVM上で動作しているtd-agentのコンフィグを書き換えることで問題解決をできました。
また、td-agentの実行時に権限が足りていない問題も別途存在しているため、こちらも採点対象としていました。

解答手順

/etc/td-agent/td-agent.conf のs3_regionの下に以下の内容を挿入

force_path_style true

また、グループを追加する

sudo usermod -aG adm td-agent

採点基準

  • 50%: 権限の問題が解決できているか
  • 50%: td-agentのアドレスモデルの設定を適切なものに変更できているか